package main

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	// 创建一个buffer，用于存储multipart form数据
	var b bytes.Buffer
	w := multipart.NewWriter(&b)

	basePath, _ := os.Getwd()

	// 打开文件
	file, err := os.Open(fmt.Sprintf("%s/common/template.xlsx", basePath))
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	fileName := "axiekdfjslfdkeld"

	w.WriteField("file_name", fileName)

	// 创建一个form文件
	fw, err := w.CreateFormFile("file", "file_name")
	if err != nil {
		log.Fatal(err)
	}

	// 将文件内容写入form文件
	_, err = io.Copy(fw, file)
	if err != nil {
		log.Fatal(err)
	}

	// 关闭multipart writer，这将写入尾部的boundary
	w.Close()

	// 创建一个HTTP请求
	req, err := http.NewRequest("POST", "http://localhost:8080/upload", &b)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", w.FormDataContentType())

	// 发送HTTP请求
	client := &http.Client{}
	_, err = client.Do(req)
	if err != nil {
		log.Fatal(err)
	}

	// 下载文件
	resp, err := http.Get(fmt.Sprintf("http://localhost:8080/download?file_name=%s", fileName))
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	// 将下载的文件保存到本地
	out, err := os.Create(fmt.Sprintf("./%s.pdf", fileName))
	if err != nil {
		log.Fatal(err)
	}
	defer out.Close()

	_, err = io.Copy(out, resp.Body)
	if err != nil {
		log.Fatal(err)
	}
}
